home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-05 / driverss.zip / GENERIC.ASM < prev    next >
Assembly Source File  |  1991-01-26  |  4KB  |  182 lines

  1. version    equ    0
  2.  
  3.     include    defs.asm
  4.  
  5. code    segment    word public
  6.     assume    cs:code, ds:code
  7.  
  8.     public    int_no
  9. int_no    db    0,0,0,0            ;must be four bytes long for get_number.
  10.  
  11.     public    driver_class, driver_type, driver_name, driver_function, parameter_list
  12. driver_class    db    0,0        ;null terminated list of classes.
  13. driver_type    db    0        ;from the packet spec
  14. driver_name    db    'generic',0    ;name of the driver.
  15. driver_function    db    2
  16. parameter_list    label    byte
  17.     db    1    ;major rev of packet driver
  18.     db    9    ;minor rev of packet driver
  19.     db    14    ;length of parameter list
  20.     db    EADDR_LEN    ;length of MAC-layer address
  21.     dw    GIANT    ;MTU, including MAC headers
  22.     dw    MAX_MULTICAST * EADDR_LEN    ;buffer size of multicast addrs
  23.     dw    0    ;(# of back-to-back MTU rcvs) - 1
  24.     dw    0    ;(# of successive xmits) - 1
  25. int_num    dw    0    ;Interrupt # to hook for post-EOI
  26.             ;processing, 0 == none,
  27.  
  28.     public    rcv_modes
  29. rcv_modes    dw    4        ;number of receive modes in our table.
  30.         dw    0,0,0,rcv_mode_3
  31.  
  32.     public    as_send_pkt
  33. ; The Asynchronous Transmit Packet routine.
  34. ; Enter with es:di -> i/o control block, ds:si -> packet, cx = packet length,
  35. ;   interrupts possibly enabled.
  36. ; Exit with nc if ok, or else cy if error, dh set to error number.
  37. ;   es:di and interrupt enable flag preserved on exit.
  38. as_send_pkt:
  39.     ret
  40.  
  41.     public    drop_pkt
  42. ; Drop a packet from the queue.
  43. ; Enter with es:di -> iocb.
  44. drop_pkt:
  45.     assume    ds:nothing
  46.     ret
  47.  
  48.     public    xmit
  49. ; Process a transmit interrupt with the least possible latency to achieve
  50. ;   back-to-back packet transmissions.
  51. ; May only use ax and dx.
  52. xmit:
  53.     assume    ds:nothing
  54.     ret
  55.  
  56.  
  57.     public    send_pkt
  58. send_pkt:
  59. ;enter with es:di->upcall routine, (0:0) if no upcall is desired.
  60. ;  (only if the high-performance bit is set in driver_function)
  61. ;enter with ds:si -> packet, cx = packet length.
  62. ;if we're a high-performance driver, es:di -> upcall.
  63. ;exit with nc if ok, or else cy if error, dh set to error number.
  64.     assume    ds:nothing
  65.     ret
  66.  
  67.  
  68.     public    get_address
  69. get_address:
  70. ;get the address of the interface.
  71. ;enter with es:di -> place to get the address, cx = size of address buffer.
  72. ;exit with nc, cx = actual size of address, or cy if buffer not big enough.
  73.     assume    ds:code
  74.     ret
  75.  
  76.  
  77.     public    set_address
  78. set_address:
  79. ;enter with ds:si -> Ethernet address, CX = length of address.
  80. ;exit with nc if okay, or cy, dh=error if any errors.
  81.     assume    ds:nothing
  82.     ret
  83.  
  84.  
  85. rcv_mode_3:
  86. ;receive mode 3 is the only one we support, so we don't have to do anything.
  87.     ret
  88.  
  89.  
  90.     public    set_multicast_list
  91. set_multicast_list:
  92. ;enter with ds:si ->list of multicast addresses, cx = number of addresses.
  93. ;return nc if we set all of them, or cy,dh=error if we didn't.
  94.     mov    dh,NO_MULTICAST
  95.     stc
  96.     ret
  97.  
  98.  
  99.     public    terminate
  100. terminate:
  101.     ret
  102.  
  103.     public    reset_interface
  104. reset_interface:
  105. ;reset the interface.
  106.     assume    ds:code
  107.     ret
  108.  
  109.  
  110. ;called when we want to determine what to do with a received packet.
  111. ;enter with cx = packet length, es:di -> packet type, dl = packet class.
  112.     extrn    recv_find: near
  113.  
  114. ;called after we have copied the packet into the buffer.
  115. ;enter with ds:si ->the packet, cx = length of the packet.
  116.     extrn    recv_copy: near
  117.  
  118.     extrn    count_in_err: near
  119.     extrn    count_out_err: near
  120.  
  121.     public    recv
  122. recv:
  123. ;called from the recv isr.  All registers have been saved, and ds=cs.
  124. ;Upon exit, the interrupt will be acknowledged.
  125.     assume    ds:code
  126.     ret
  127.  
  128.  
  129.     public    recv_exiting
  130. recv_exiting:
  131. ;called from the recv isr after interrupts have been acknowledged.
  132. ;Only ds and ax have been saved.
  133.     assume    ds:nothing
  134.     ret
  135.  
  136.  
  137. ;any code after this will not be kept after initialization.
  138. end_resident    label    byte
  139.  
  140.  
  141.     public    usage_msg
  142. usage_msg    db    "usage: generic [-n] [-d] [-w] <packet_int_no>",CR,LF,'$'
  143.  
  144.     public    copyright_msg
  145. copyright_msg    db    "Packet driver for a generic device, version ",'0'+majver,".",'0'+version,CR,LF
  146.         db    "Portions Copyright 19xx, J. Random Hacker",CR,LF,'$'
  147.  
  148.     extrn    set_recv_isr: near
  149.  
  150. ;enter with si -> argument string, di -> wword to store.
  151. ;if there is no number, don't change the number.
  152.     extrn    get_number: near
  153.  
  154. ;enter with dx -> argument string, di -> wword to print.
  155.     extrn    print_number: near
  156.  
  157.     public    parse_args
  158. parse_args:
  159. ;exit with nc if all went well, cy otherwise.
  160.     clc
  161.     ret
  162.  
  163.  
  164.     public    etopen
  165. etopen:
  166. ;if all is okay,
  167.     mov    dx,offset end_resident
  168.     clc
  169.     ret
  170. ;if we got an error,
  171.     stc
  172.     ret
  173.  
  174.     public    print_parameters
  175. print_parameters:
  176. ;echo our command-line parameters
  177.     ret
  178.  
  179. code    ends
  180.  
  181.     end
  182.